package engine.net.mgr
{
	import engine.net.NetSocket;
	
	import flash.events.Event;
	
	import newx.utils.debug.IO;

	public class NetMgr
	{
		public function NetMgr(){}
		
		/**
		 * 
		 * @param host
		 * @param port
		 * @param successCallBackFunc
		 * 
		 */		
		public static function netConnect(host:String,port:Number,successCallBackFunc:Function = null):void
		{
			var net:NetSocket	=	NetSocket.getInstance();
			
			if(successCallBackFunc != null)
			{
				var onConnectSuccess:Function	=	function(event:Event):void
				{
					IO.traceMessage("服务器连接成功!");
					successCallBackFunc.call(this);
					net.removeEventListener(Event.CONNECT,onConnectSuccess);
				} 
				net.addEventListener(Event.CONNECT,onConnectSuccess);
			}
			
			connect( host, port);
		}
		
		public static function connect(host:String,port:Number):void
		{
			var net:NetSocket	=	NetSocket.getInstance();
			if(!net.connected)
			{
				IO.traceMessage("连接服务器...["+host,port+"]");
				net.Connect(host,port);
				SystemReturn.StartListener();
			}
		}
		
		public static function connected():Boolean
		{
			var net:NetSocket	=	NetSocket.getInstance();
			return net.connected;
		}
		
		/**
		 * 发消息 
		 * @param command
		 * @param argc
		 * 
		 */		
		public static function sendCustomMsg(command:int,...argc):void
		{
//			var net			:NetSocket	=	NetSocket.getInstance();
//			var tSize		:uint		=	argc.length;			
//			var sendPacket	:NetPacket	=	new NetPacket();
//			
//			sendPacket.WriteInt(command);
//			
//			for(var i:uint = 0 ; i < tSize ; i ++)
//			{
//				if(argc[i] is int)
//				{
//					sendPacket.WriteInt(argc[i])
//				}
//				else if(argc[i] is Number)
//				{
//					sendPacket.WriteFloat(argc[i])
//				}
//				else if(argc[i] is String)
//				{
//					sendPacket.WriteString(argc[i])
//				}
//				else if(argc[i] is WString)
//				{
//					sendPacket.WriteWString(argc[i])
//				}
//				else if(argc[i] is Point)
//				{
//					sendPacket.WriteObject(argc[i])
//				}
//			}
//			
//			net.send(sendPacket.data);
			SystemSender.getInstance().CustomMsg(command,argc);
		}
		
//		/**
//		 * 注册消息回调
//		 * @param command
//		 * @param callBackFunc(val:NetObj)
//		 * 
//		 */		
//		public static function addCustomMsgEvent(command:int,callBackFunc:Function):void
//		{
//			var net			:NetSocket	=	NetSocket.getInstance();
//			var eventType	:String		=	String(command);
//			
//			var onCallBack:Function	=	function(e:MsgEvent):void
//			{
//				var msg:ByteArrayEx	= e._msgData;
//				
//				var ObjectId:Point		= msg.readObjectEx();
//				var AsyncId:Point		= msg.readObjectEx();
//				var nArgNum:uint		= msg.readUnsignedShort();	
//				
//				var i:uint			= 0;
//				var	 ArgValue:Array	= new Array();
//				
//				var showmsg:String	=	"";
//				for(i = 0; i < nArgNum; i++)
//				{
//					var	type:uint	=	msg.readByte();
//					ArgValue[i] = msg.GetDataByType(type);
//					
//					showmsg += ArgValue[i] + " ";
//				}			
//				IO.traceLog(showmsg);	
//				
//							
//				callBackFunc.call(this,ArgValue);
//				net.removeEventListener(eventType,onCallBack);
//			}			
//			net.addEventListener(eventType,onCallBack);
//		}
		
//		/**
//		 * 将数据包转换成NetObj 
//		 * @param dataEx
//		 * @return 
//		 * 
//		 */		
//		public static function toNetObj(dataEx:ByteArrayEx):NetObj
//		{
//			if(dataEx == null)
//			{
//				return null;
//			}
//			return new NetObj(dataEx);
//		}
	}
}